package lombok使用;

import lombok.*;

import java.io.File;
import java.io.FileInputStream;

@Data
@Builder    //作用于类上，将类转变为建造者模式
@NoArgsConstructor //生成无参构造器；
@AllArgsConstructor //生成全参构造器
@RequiredArgsConstructor    //生成包含final和@NonNull注解的成员变量的构造器；
public class Student {
    @NonNull
    private String name;
    private int age;
    private String sex;

    public void print(@NonNull String s) {
        System.out.println("测试NonNull注解");
        System.out.println(s);
    }

    public static void main(String[] args) throws Exception {
        //构建者模式创建对象
        Student student1 = Student.builder().name("张三").age(18).build();
        System.out.println(student1);
        //@RequiredArgsConstructor生成包含@NonNull注解的成员变量的构造器；
        Student student2 = new Student("李四");
        System.out.println(student2);
        //@NonNull放在方法上校验参数不能为空，否则抛出空指针异常
        student2.print(null);
        //@NonNull放在属性上，所有给该属性赋值的地方不能为空，否则抛出空指针异常
        Student student3 = new Student();
        student3.setName(null);
        //@Cleanup自动关闭资源，针对实现了java.io.Closeable接口的对象有效，如：典型的IO流对象
        File file = new File("d:\\a.txt");
        @Cleanup FileInputStream stream = new FileInputStream(file);
        int len;
        byte[] bytes = new byte[1024];
        while ((len = stream.read(bytes)) != -1) {
            System.out.println("content:" + new String(bytes, 0, len));
        }
    }
}
